{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Closed loop controlled responses" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I discuss drawing these response qualitatively in [this video](https://youtu.be/8iO_lNuSZYc). Note that the responses that are drawn in the video match the responses drawn here, but the value of $\\tau_I$ specified there doesn't show overshoot as in this notebook. The value in the video is $\\tau_I=10$, but that was obviously a bit too large to allow for the extreme oscillation. You can get a similar response to the one I sketched by using $\\tau_I=1$. The value below has been chosen to make the discussion in the video still hold in the same way." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from tbcontrol.loops import feedback\n", "import control\n", "import matplotlib.pyplot as plt\n", "import numpy\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "s = control.tf([1, 0], 1)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "Gp = 1/(10*s + 1)\n", "PI = 5*(1 + 1/(10*s))\n", "P = 5" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "ts = numpy.linspace(0, 30)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Find the time where the error becomes zero by interpolating on the output response" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "t, y = control.step_response(feedback(PI*Gp, 1))\n", "errorzero = numpy.interp(1, y, t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This function will plot a response for us" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def plotresponse(ax, G, *args, **kwargs):\n", " ax.plot(*control.step_response(G, T=ts), *args, **kwargs)\n", " ax.axvline(errorzero, color='teal', linestyle='--')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'm trying to get all the colors to match the video here." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVQAAAJCCAYAAACf9T+uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xd4FVX6wPHvm04SSkhCDYEAoUMoERBBEERBFLuCqOBad0WxrG39ra7YEMRV14ouYllBbBgRpEiXjhAk9E6oqRAIafee3x/3AiEk5AbuzSS57+d5zjN3Zs7MfQPh5czMmXPEGINSSqmL52N1AEopVVVoQlVKKTfRhKqUUm6iCVUppdxEE6pSSrmJJlSllHITTahKKeUmmlCVUspNNKEqpZSb+FkdgLtERESYJk2aWB2GUqqKWbNmTaoxJtKVulUmoTZp0oTVq1dbHYayWOhrrwFw/B//sDgSVVWIyB5X63rskl9EJorIERHZUMJ+EZF3RWS7iKwXkc6F9g0XkW3OMtxTMaqqJ6eggJyCAqvDUF7Kk/dQJwEDzrN/IBDrLA8AHwKISG3gRaAb0BV4UUTCPBinUkq5hccu+Y0xi0SkyXmqXA98YRzDXS0XkVoiUh/oA8wxxqQDiMgcHIl5sqdiVZWDMQa7Mdicy+LKKYePH8cAdmMwxmCcxxe3pJjPQLH7ioupcN3C286qV4af0SreMu5cnZAQ6oWGeuTcVt5DbQjsK7Se7NxW0na3euyxx1i3bp27T1ulGaDAz48CPz9szmWBry82Pz9svr7YfXyw+fqe/mz39cUu4vhcaN34+GCc2wsviy0Azs+IuBxrvfHjPfXHoCq5S06eZOWYMR45t5UJtbh/HeY82889gcgDOG4XEB0d7b7IvEyBry85QUHkBgaSFxhIXkCA43NAAPkBAeT7+5Pv50eBv79LSU3sdnxsNnztdnwKFbHb8TEGH5sNH2Mc63Y7Ysx5C1Ds+jlLY9gdEwNAzM6dZ36RjDn7l6qYdSj+F++8+0qo63L9isgLxkdu6cFcYWVCTQYaFVqPAg44t/cpsn1BcScwxkwAJgDEx8eX6Tfh7bffLkv1Ss9uDLsyMlh36BAbjhxhe0YGO9LT2Z6eTkp29jn1I4ODaVi9OpHBwYQHBxNRrRrhwcGEV6tGraAgagQGUtO5rBEYSPWAAIL9/Qn298ff19eCn1Ap61mZUBOAkSIyBccDqKPGmIMiMgt4rdCDqKuA56wKsrI6kJXF/F27WLF/P2sPHSLx0CGy8vIAR+upUc2aNAsL44ZWrWgWFkbTsDCiatSgYY0a1AsNJUCTolJl5rGEKiKTcbQ0I0QkGceTe38AY8xHwAzgGmA7kA3c49yXLiIvA6ucpxp96gGVKlladjbzdu1i/u7dzNu1iy1paQCEBgQQV7cud8fF0bFePTrWq0fbyEiq+ftbHLFnVHv1VQBOPv+8xZEob+TJp/xDS9lvgIdL2DcRmOiJuKqSrNxcpm3ezOQNG5i9Ywc2YwgNCODyxo25v3NnroiJIa5uXXx9vOcN43ybzeoQVDmyGzsZJzNIP5l+umTknFnPOJlBRk4GmTmZZORkkHEyg/s638ej3R71SDxV5k0pb2Gz2/ll2za+XL+e6Vu3klNQQOOaNfl7jx5c37Il8Q0a6D1MVSkZY8jKyyLlRApHThwhJTuF1OxUUk44lqknUx3L7FTSstNIO5lGxskMSu7UBqEBodQKqkVYUBhh1cKICYshIjjCYz+DJtRKIs9m46v16xn7++9sSUujTkgI93XqxND27ekeFYVPGboUKVVejDFk5mRy6Pihs8rhE4c5fOIwR04c4fBxx/LIiSPk2nKLPU+gbyCRIZFEBEcQERxB45qNCa8WTnhwOOHVwqldrfZZJaxaGGFBYfj7lu+tLU2oFdyJvDw++eMPxi9bRvKxY3SsV49vbrmFm1q3xs+LLuVVxXM87zj7j+1nf9Z+ko8lcyDrwOly8PhBxzLrYLFJ0t/HnzohdagbWpe6IXVpX7c9dYLrEBkSSWRwJHVC6pxOoJHBkQT7ByOVoNGgCbWCMsbweWIiT82ZQ2p2Npc3bswn113H1c2aVYpfLKtE16xpdQhVQm5BLvuO7WNP5h72Ht3LvmP72Hd0n2N5bB/Jx5I5lnvsnONqBtakQfUG1K9en57RPakfWp/6ofWpF1rvdKkbWpewoLAq+XusCbUC2pmRwYPTpzN3504ua9SIn4YMoUejRqUfqNg5apTVIVQKebY89mTuYVfmLnZn7mZXxi52Ze5iz9E97Mncw8HjB885pk5IHRrVaESL8Bb0bdKXqBpRNKzRkIbVGxJVI4oG1RsQEhBiwU9TcWhCrUAK7HbeWb6cf86fj5+PDx9ccw0Pxsfr/VF1QbJys9iWvo3t6dvZkb6DHRmOsjNjJ/uO7jvrYY6/jz/RNaNpUqsJA5sPJLpmNI1rNaZxzcZE14ymYY2GBPkFWfjTVA6aUCuIbWlp3PHDD6w+cIDrWrTgg0GDiKpRw+qwKp2Al18GIO+f/7Q4kvKRb8tnR8YOtqRuYXPqZrambWVb+ja2pm3l8InDZ9WtG1KXZrWb0btxb5qGNaVpWFOa1GpCTK0YGlRvgK+P9g65WJpQK4Df9+5l8JQpCPDNLbdwa5s2VfL+UnmwV9F30U/knWBz6mY2pmxkU+qm08sd6TuwmTN9b+uG1KVFeAsGxQ4iNjyW2NqxxIbH0jSsKaEBnhlhSZ2hCdVi3yYlcdePPxJdsyYzhw2jWe3aVoekLJRny2NL6hY2HNnAn0f+ZMORDWw4soFdmbtO1/H38Sc2PJb2ddpza5tbaRnekpYRLWkZ3pKaQfpQzkqaUC1ijGH8smU8NWcOlzVqxLQhQ4gIDrY6LFWO0rLTSDycyLpD604vN6VsIt+eD4Cfjx8tw1vSLaob93S8h7Z12tImsg3NwpqVe/9K5RpNqBYosNsZNXMmH6xeza1t2vDFjTcS5Kd/FVXZoeOH+OPgH/xx8A/WHFzDHwf/YO/Rvaf31w+tT8d6Hbmm+TV0qNuBdnXa0TKiJQG+ARZGrcpK/xWXM2MM9yYk8EViIn+/9FLe6N+/cj/FNwZsNsjPdywLChzl1GebDex2x/LU5+KKczxTjDl3vXA59Z0lLDuceu123ryz9xX9XNrPdBFO5B5na9pWtqRuYUuao6Rmp53eH1WjIQ/Wbk5s7atoGtaUZrWbUSuolmOnHTgIHDzo/KDcLiYGYmM9cmpNqOXs9SVL+CIxkX/17s2LffqU75fn5sLhw3DkCGRkQGbmmWVmJhw/DidOnL3MyTm35OU5EmhenqNUIH9YHQAQAnRyluLtd5aF5RSROss//gHOUcncTRNqOfpu40aenzePYe3b80Lv3u49uTGOZLlzJ+zY4Sg7d8K+fXDokKNkZpZ8vJ8fhIZCSMiZZUgI1KwJdetCUJCjBAY6SkAA+PufvfT1dZznVPH1dRQfnzPLop99fByzAJwqRdeLK1D6srRtpSmhXk5BDhtTNrL+8HoSDyeSdCSJE/mOAbprBtagbWRb2tZpS+s6bWgd0Zoagdr1rcJp6PYZlU7ThFpOVu3fz90//kiPRo34dPDgi+sWZbPB1q3wxx9nytq1cPTomToiEBUF0dHQrh306wf16jlKnToQFuYotWo5lsHBZZqzqaLyGz0agIIXXnDL+bJys1i8dzELdi9g8d7FrDmwhnx7PoLQrn47Lut6N5c2upRLoy6lee3m2t3Ny2lCLQf7jh5l8JQp1A0N5cfbb7+wB1B79sCsWfDrrzB3LmRlObYHBUFcHNxxB7RuDc2aOUrjxo59qkxO5J04nUDn757PmgNrsBkb/j7+XNLwEp649Al6RfeiR6MehFXT2c3V2TShetjxvDyumzyZ7Px85t51F3VCyvCu859/wqRJMHMmbNrk2BYdDUOGQM+e0LkztGrluLxWF6TAXsCaA2uYu3Muc3fNZem+peTZ8vD38adbVDee6/kcfZr04dJGlxLsr93a1Pnpv0QPuy8hgT+PHGHGHXfQtk6d0g/IyYFvv4WPPoKlSx33Jvv0gfvvhwEDHAlULysvyv5j+5m1YxYzt89k7s65ZOY47i13qteJx7o9Rr+m/egZ3VMTqCozjyZUERkAvAP4Ap8aY8YU2f9v4ArnajBQxxhTy7nPBvzp3LfXGDPYk7F6wvStW/kmKYlXrriCq5s3P3/lgwdh/Hj47DNIT3d06xg/HoYPh/Dw8gm4iiqwF7B031J+2foLv+74lfWH1wPQsHpDbmp1E1c1u4q+MX2JDIm0OFJV2Xlykj5f4H2gP46poVeJSIIxZuOpOsaYxwvVf4Sze5qcNMZ09FR8nnYiL4+HZ8ygTWQkT112WckVc3PhnXfg5ZcdrdMbb4SHHoIrrtCW6AWIq1cPgKM5R5m1YxY/b/2ZGdtmkH4yHT8fP3pG9+SNK99gYPOBtKvTTh8iKbfyZAu1K7DdGLMTwDld9PXAxhLqD8UxM2qV8NLChew9epTF99xT8pTMM2fCqFGwbRtcdx38+9+OB0rqghw+fpgHu8APm34gctxI8u35hFcLZ1DsIK5rcR1XN79auzEpj/JkQm0I7Cu0ngx0K66iiDQGYoB5hTYHichqoAAYY4yZVsxxDwAPAERHR7sp7Iu3/vBh3lq2jHs7daJncXHt2QMjR8L06dCiBcyYAQMHln+gVcDeo3v5YdMP/LDpB5bsXYIhlEY1GjOq2ygGtxzMpY0uxc9HHxWo8uHJ37TirqVKeqdvCPCdMabwHMDRxpgDItIUmCcifxpjdpx1MmMmABMA4uPjK8S4bXZjeHD6dGpXq8bY/v3PrfD773DDDY7L+3Hj4NFHHQ+elMsOZB3g26Rv+SbpG5YlLwOgQ90OvNj7RUYvggNZwrir3NMPVamy8GRCTQYKz9sRBRwooe4Q4OHCG4wxB5zLnSKyAMf91R3nHlqxTFizhuXJyXxxww3Urlbt7J3/+x/85S+OPqKnWqfKJWnZaXy78Vsmb5jM4j2LMRji6sbxWt/XuLXtrTSv7Xjo9/Ki0RZHqryZJxPqKiBWRGJwvLg8BLijaCURaQmEAcsKbQsDso0xuSISAVwGjPVgrG5x6Phxnp07l74xMdzZocOZHcbAiy86Hjz17g0//AA67mmpcgty+WXbL3y5/kt+2foL+fZ8WkW04sXeL3J7u9tpFdHK6hCVOovHEqoxpkBERgKzcHSbmmiMSRKR0cBqY0yCs+pQYIoxZw3x0xr4WETsgA+Oe6glPcyqMJ6cPZuTBQV8cM01Z54enzwJ99wD33zjWH70kV7in4cxhpX7V/LZus/4JukbMnMyqRdaj0e6PsKdHe6kY72O+mReVVgevVtvjJkBzCiy7YUi6/8q5rilQHtPxuZum1JS+PrPP/lHz560jIhwbMzPdzy9/+03GDMGnn5au0KV4MiJI3y1/ismrp1IUkoSwf7B3NT6Ju7qcBd9Y/rqgyVVKehvqZuMX7aMID8/Huve/czGxx93JNOJEx2tU3UWu7Ezd+dcPl7zMQlbEiiwF9A9qjufXPcJt7W97YK6OOl028pKmlDd4GBWFl+uX8+9nToReepd/QkT4P334e9/12RaRGp2Kp+t/YyP13zMjowdRARH8GjXR/lLp7/Qtk7bizr3Iv2zVhbShOoG/1m5kgK7nScuvdSxYfFiePhhx7v3Y8ac/2AvsiJ5Be+teo9vk74l15ZLr+hejL5iNDe3vplAv0C3fMfyfY6uz921paosoAn1ImXl5vLBqlXc1Lo1zWvXdnTav/lmaNoUJk92DKbsxfJt+Xy/6XveWfEOy5OXUz2gOvd1vo+H4h+iXZ12bv++np99BrhvPFSlykIT6kX69I8/OJqby1M9ejimDbnhBse0IAkJjsGbvVRadhoT1kzg/VXvsz9rP81rN+fdAe8youMIqgdWtzo8pTxCE+pFyLfZ+Pfy5VzeuDFdGzZ0DPKcmAi//AItW1odniX2ZO7hrWVv8enaT8nOz+bKplfy8bUfMzB2ID7iY3V4SnmUSwlVRC4zxvxe2jZvMzUpiX3HjvHBoEEwe7bjEn/0aK98L3/94fWM/X0sUzZMQUQY1n4Yf+/xd49c1itVUbnaQv0P0NmFbV7DGMO4pUtpExnJNTExZ+6bPv201aGVq+XJy3l50cvM2DaD0IBQRnUbxWPdH6NRTX0opLzPeROqiFwK9AAiReSJQrtq4Hj7yWvN2bmTxMOHmTh4MD4TJ8KGDfDdd44ZQb3Akr1LGL1wNHN2ziG8WjgvX/EyD1/ysOXzLPVv2tTS71ferbQWagAQ6qxX+EnCMeAWTwVVGYxbupT6oaHcER0NV18Nl18ON91kdVget3D3Ql5a+BLzd88nMjiSsVeO5a+X/JXQgFCrQwNg5p13Wh2C8mLnTajGmIXAQhGZZIzZU04xVXhb09KYu3Mnr/frR+DYsZCaCm+9VaVfK121fxXPz3ueOTvnUC+0Hm9d9RYPxj9Y4eZdSti8GYDBrXTgFFX+XL2HOklEzhlv1BjT183xVApTk5IAuKtWLXj7bbj7bujSxeKoPCPpSBL/nP9Pftz8I+HVwhl/1Xj+Gv9XqvlXK/1gC9w0dSqg/VCVNVxNqH8v9DkIuBnHSPpe6ZukJHpGR9PwpZccUzi/9prVIbndnsw9/HP+P/lq/VeEBoTyUp+XeKz7YzqFiFLn4VJCNcasKbLpdxFZ6IF4KryNKSlsOHKEd2NjHQ+hXnoJGjSwOiy3OZpzlNeXvM7by99GRPh7j7/zzGXPEB6sM68qVRpX+6EWHg3ZB+gC1PNIRBXct0lJCHDLBx9Aw4bw5JNWh+QW+bZ8JqyZwL8W/ovU7FTu6nAXr/R9heiaFWeuLqUqOlcv+dfgmA9KcFzq7wLu9VRQFdnUjRu5vEYN6v/+O/z3v3BqdKlKbMa2GTwx6wm2pG2hT5M+jL9qPJ3re20XY6UumKuX/DGeDqQy2HDkCBtTUnj/0CEIC3O8alqJ7UjfwWOzHmP61um0CG9BwpAErm1xbaUeEf/m1q2tDkF5MVcv+YOAvwE9cbRUlwAfGmNyPBhbhTM1KQkfEW7+5hu4804ICrI6pAtyIu8Ery95nXFLxxHgG8DYK8cyqvsoAnwr/9Qs39x6q9UhKC/m6mgVXwBtcbxu+h6OOZ++LO0gERkgIltEZLuIPFvM/hEikiIi65zlvkL7hovINmcZ7mKcHmOMYWpSEn18fKibkQH33Vf6QRWMMYYfN/1I6/db8+riV7m1za1sGbmFpy57qkokU4BP1qzhkzVFn6EqVT5cvYfa0hgTV2h9vogknu8AEfEF3gf645hSepWIJBQz2d43xpiRRY6tDbwIxONoEa9xHpvhYrxu9+eRI2xJS+PxNWuga1coPKtpJbDv6D5GzhxJwpYEOtTtwNc3f03P6J5Wh+V2f/3lFwDur6L9glXF5moLda2InJ4sSUS6AaWNNNUV2G6M2WmMyQOmANe7+H1XA3OMMenOJDoHGODisR7xzYYN+Ipw02+/VarWqc1u453l79DmgzbM2TGHsVeOZfX9q6tkMlXKaq62ULsBd4vIXud6NLBJRP4EjDGmuOZaQ2BfofVk53mKullELge2Ao8bY/aVcGzDogeKyAPAAwDR0Z7r3mOMYerGjfTNziZSBIYM8dh3udO6Q+u4/+f7WX1gNQObD+SDQR/QpFYTq8NSqspyNaFeSOuwuEfFRV9f/RmYbIzJFZGHgM+Bvi4eizFmAjABID4+/pz97rLu0CG2p6fzzMKFjmRavWKPOJ9ny+O1xa/x6uJXqV2tNlNunsJtbW+r1E/vlaoMXE2orxhj7iq8QUS+LLqtiGSg8KCYUcCBwhWMMWmFVj8B3ih0bJ8ixy5wMVa3m5qUhB9wY2Ii/PvfVoXhknWH1jFi2ggSDydyZ4c7eWfAO9SuVrv0A5VSF83VhHrW3L4i4ofjbanzWQXEikgMsB8YApzVcVNE6htjDjpXBwObnJ9nAa+JyKnBNa8CnnMxVrcyxvBNUhJXHjlCeLNm0K24uxbWy7Pl8fri13ll8StEBEfw05CfGNxysNVhlbt7Ona0OgTlxUobYPo54B9ANRE5xplL8Tycl9olMcYUiMhIHMnRF5hojEkSkdHAamNMAvCoiAzG8fZVOjDCeWy6iLyMIykDjDbGpF/ID3ix1h46xK7MTP65dKnjYVQFvGzelLKJYT8MY+2htQxrP4x3B77rta3STwZ7338iquIQY0q/9SgirxtjLGkhuio+Pt6sXr3a7ecd+/vvPDN3LofeeYe627ZBeMUZJMQYw0erP+LJ2U8SEhDCJ9d9wg2tbrA6LEu9sWQJAM/01F4Myj1EZI0xJt6Vuq5e8s90Pok/izFmUZkiq4QW7txJ67Q06g4YUKGS6ZETR7g34V6mb53O1c2uZtINk6gX6pXj1Zzl+XnzAOsSan5+PsnJyeTkeNVLhFVCUFAQUVFR+Pv7X/A5XE2oTxX+Xhx9TNfgeCJfZRXY7SzevZthO3fCY49ZHc5pv27/lRHTRpCZk8k7A95hZNeROkVzBZGcnEz16tVp0qSJ9qqoRIwxpKWlkZycTEzMhQ9d4urgKNcVXheRRsDYC/7WSmLdoUNk2e30OXQIeve2Ohzybfn837z/Y+zSsbSv0545d82hfd32VoelCsnJydFkWgmJCOHh4aSkpFzUeVxtoRaVDFT5CdcX7N4NQO/oaLiIywB32H9sP0O+H8KSvUt4qMtD/HvAvwnyq5yDs1R1mkwrJ3f8vbk62tR/ONOx3gfoBJz3Xf6qYMHGjbRMTaXeFVdYGsfsHbMZ9sMwTuaf5OubvmZo+6GWxqOUKp6rLdSNOLo+GeAojrebSnuXv1Kz2e0sPnCAIbt3w8iRpdb3TAw2/rXgX7y6+FXa1mnLt7d+S6sInc3zfJ7o3r30SlXc4cOHefzxx1m+fDlhYWEEBATw9NNPc+ONN1odWpVXWj9UP+A14C/AXhz9UBsBE0VkpTEm3/MhWmPdoUMcM4Y+WVnQokW5f3/6yXTu+P4OZu2YxT0d7+G9a96rcFM2V0Rjr7rK6hAsZYzhhhtuYPjw4Xz99dcA7Nmzh4SEBIsj8w6lPRoeB9QGYowxnY0xnYCmQC3gTU8HZ6WFu3YB0LtFi3LvzP/n4T+55JNLmLdrHhOuncDE6ydqMnXR07Nn8/Ts2VaHYZl58+YREBDAQw89dHpb48aNeeSRR5g0aRLXX389AwYMoGXLlrz00ksWRlo1lXbJfy3QwhTq/W+MOSYifwU2A6M8GZyVFiQmEpuWRoN+/cr1e7/b+B0jpo2gemB1FoxYQI9GPcr1+yu7t5YvBypGS/WxXx9j3aF1bj1nx3odeXvA2yXuT0pKonPnkucDW7lyJRs2bCA4OJhLLrmEQYMGER/vUp915YLSWqjGFPMqlTHGRjGjP1UVNrudxSkp9N6zB8opodrsNp7/7Xlu/fZW2tdtz5oH1mgyVRft4YcfJi4ujksuuQSA/v37Ex4eTrVq1bjppptY4nyzTLlHaS3UjSJytzHmi8IbReROHC3UKmn94cNkAn1EICLC4993Iu8Ed/xwBwlbEriv0328d817BPoFevx7lWedryXpKW3btuX7778/vf7++++Tmpp6uhVatGuQdvFyr9JaqA8DD4vIAhEZLyJvishC4FHgr54PzxoLt2wBoHebNh7/rgNZB7h80uVM3zqddwa8w4TrJmgyVResb9++5OTk8OGHH57elp2dffrznDlzSE9P5+TJk0ybNo3LLrvMijCrrPO2UI0x+4FuItIXxxB+Asw0xvxWHsFZZcG6dTRLTyfKw91M1h1ax7VfX8vR3KMkDElgUItBHv0+VfWJCNOmTePxxx9n7NixREZGEhISwhtvvMHJkyfp2bMnd911F9u3b+eOO+7Q+6du5uqrp/OAeR6OpUKwG8OijAxuTE6GSy/12Pf8svUXbv/udsKqhbHkniXE1Ysr/SBVqlf7VunhJVxSv359pkyZcs72SZMmUadOHd577z0LovIOF/rqaZX15+HDZPj40CckBAI9c+n9waoPeGTmI3Ss15Gfh/5Mg+oNPPI93kiH7VNW0oRaxIK1awHo7YGR340xvDD/BV5Z/ArXtbiOyTdPJiQgxO3f483ud3Zg14GmzzVixAhGjBhhdRhVmo75VsTC9euJycggeoB7Z60usBfw4PQHeWXxK9zb6V5+uP0HTaYe8Nm6dXy2zr19P5VylbZQC7Ebw8Ljxxl85Ai0bu228+YU5DD0+6FM2zyN53s9z8tXvKzdVZSqgjzaQhWRASKyRUS2i8izxex/QkQ2ish6EflNRBoX2mcTkXXOUi4vIicdOkS6nx99atd22+ummTmZXP3V1fy0+SfeHfAur/R9RZOpUlWUx1qoIuILvA/0xzF+6ioRSTDGbCxUbS0Qb4zJdr7OOha43bnvpDGmXKewXPS7YwCt3s63Si5WyokU+n/Zn40pG/n65q8Z0m6IW86rlKqYPNlC7QpsN8bsNMbkAVOA6wtXMMbMN8ac6nW8HIjyYDylWrt5M+HZ2TS++uqLPtfBrIP0ntSbrWlb+Xnoz5pMVbnx9fWlY8eOtGvXjltvvfWsjv3lJSEhgTFjxgAwbdo0Nm48047q06cPpU2ouXv3btq1OzOG/SeffELnzp3JyMi44JhGjBhBTEwMHTt2pGPHjqzzwL12TybUhsC+QuvJzm0luReYWWg9SERWi8hyESl2Kk8RecBZZ/XFTl0AkHj8OHGZmUi9i5vsbt/RfVw+6XL2Ht3LzGEzubr5xSdo5ZoPBw3iw0He/YJEtWrVWLduHRs2bCAgIICPPvrorP3GGOx2u0djGDx4MM8+67jLVzShltWXX37Jf/7zH2bPnk1YWNhFxTVu3DjWrVvHunXr6OiBnjyeTKjF3SgsdkAV59gA8TiGCzwl2jl16x3A2yLS7JyTGTPBGBNvjImPjIy8qGAL7HY2+PsT53dxd0F2Zezi8kmXc+TEEWbfNZveTayfi8qb3N+lC/d36WJ1GBVGr1692L59O7t376Z169b87W9/o3Pnzuzbt4/JkyfTvn172rVrxzPPPHP6mNDQUJ588kkBu1irAAAgAElEQVQ6d+5Mv379zplnyWaz0bRpU4wxZGZm4uPjw6JFi876vkmTJjFy5EiWLl1KQkICTz31FB07dmTHjh0AfPvtt3Tt2pUWLVqwePHiEuOfOnUqY8aMYfbs2UQ4x9XYvn07V155JXFxcXTu3Pn0OSsCTz7lT8YxGPUpUcCBopVE5ErgeaC3MSb31HZjzAHncqeILMAx7YrH/uS2799Pjp8fcReRmLembaXv533Jzs/mt7t/I76BvtZX3m7/9lsAvrn1VosjwTFTrrsvKzt2hLddG3SloKCAmTNnMsDZBXDLli189tlnfPDBBxw4cIBnnnmGNWvWEBYWxlVXXcW0adO44YYbOHHiBJ07d2b8+PGMHj2al1566ay3q3x9fWnRogUbN25k165ddOnShcWLF9OtWzeSk5Np3rz56VGsevToweDBg7n22mu55ZZbzopt5cqVzJgxg5deeom5c+eeE/+ePXsYOXIka9eupV6hq8Zhw4bx7LPPcuONN5KTk4PdbicrK4tevXoV++fw9ddf08Y5Lsfzzz/P6NGj6devH2PGjCHQzS/veLKFugqIFZEYEQkAhgBnPa0XkU7Ax8BgY8yRQtvDRCTQ+TkCuAzHNCwek/jHHwDEtWx5QcdvTdtK70m9ybPlsWDEAk2mFvl+0ya+37TJ6jAsdfLkSTp27Eh8fDzR0dHce++9gGOg6e7OKWJWrVpFnz59iIyMxM/Pj2HDhp1uZfr4+HD77Y5nw3feeWexQ/z16tWLRYsWsWjRIp577jmWLFnCqlWrTg8TWJqbbroJgC5durDbORlmUZGRkURHRzN16tTT27Kysti/f//p6VyCgoIIDg6mevXqpy/li5ZTyfT1119n8+bNrFq1ivT0dN544w2XYi0Lj7VQjTEFIjISmIVjPqqJxpgkERkNrDbGJOC4xA8FvnV2JdprjBkMtAY+FhE7jqQ/pkjvALdL3LYNP5uN1l27lvnYHek76Pt5X2x2GwtGLKBNpOdHqVKVgIstSXc7dQ+1qJCQMy+SFDPMcYmK6+bXq1cvPvroIw4cOMDo0aMZN24cCxYs4PLLL3fpnKdahr6+vhQUFBRbJzg4mJkzZ9KzZ0/q1KnDsGHDSozblRZq/fr1T3/3Pffcw5tvun/SEY927DfGzABmFNn2QqHPV5Zw3FKgXCecT0xPp1VWFoFNm5bpuD2Ze+j7RV9yCnKYP3y+JlNVKXTr1o1Ro0aRmppKWFgYkydP5pFHHgHAbrfz3XffMWTIEL7++mt6FjM+Qrdu3bj77rtp2rQpQUFBdOzYkY8//pjp06efU7d69epkZWVdUJyRkZH8+uuv9OnTh4iICK6++mqioqJO357Izc3FZrOdbqGez8GDB6lfvz7GGKZNm3ZWLwJ30VdPndbb7cQVFJSpQ3/ysWSu+PwKjuUeY85dc2hft1z/D1DqgtWvX5/XX3+dK6644vTDneuvd/RqDAkJISkpiS5dujBv3jxeeOGFc44PDAykUaNGp28h9OrVi6ysLNq3P/ffwJAhQxg3bhydOnW6oAdIMTExJCQk8Je//IUVK1bw5Zdf8u6779KhQwd69OjBoUOHXDrPsGHDaN++Pe3btyc1NZX/+7//K3MspZGyNP0rsvj4eFNa37aSpB8/Tvj48YzNzuYpF++rnOpnevjEYebeNZdLGrrnZQB1cfxGjwagoJgkUB42bdpEaze+tmyF0NBQjh8/bnUYliju709E1jh7HJVK3+XnzAOpDjExLtVPOZFCvy/6cfD4QWbdOUuTaQXyw223WR2C8mKaUIHEpCQA4jp1KrVuVm4W13x9Dbsyd/HrsF91Ir0KZnCrVlaHUOl5a+vUHTShAokHDlAnJ4d6pSTU3IJcbvzmRtYeXMu0IdO0034FNPCrrwCYeeedFkeivJEmVGB9Tg5x2dkQEFBiHZvdxp0/3slvu37j8xs+59oW15ZjhMpVc3butDoE5cW8/il/gd1OUlAQced5Y8IYw8gZI/lu43e82f9N7o67uxwjVEpVFl6fULds3kyunx8dnJ1+i/Pighf5aM1HPHPZMzzZ48lyjE4pVZl4fUI9/cppm+I75H+0+iNeXvQy93a6l9f7vV6eoSl1QUoavi80NNTiyKo+Tai7d+Nvs9GqmCmjZ26bycMzHmZQ7CA+uvYjHWlfVQqlDd+nPMfrH0qtP3qUNnl5BNSufdb2xEOJ3PbdbcTVjWPKLVPw8/H6P6pKYck991gdQoXSq1cv1q9fb3UYXsPrs0Sijw/9i2zbf2w/g74eRM3Amvw89GdCA/RSqbLo3qhR6ZXKyWO//so6F1+LdFXHevV428UZeYsO36c8z6sTakpKCgeDg+kQHHx6W1ZuFtdOvpajuUdZcs8SGtY43yQDqqK5/LPPAFjkxS3VU8P3gaOFemr4PuV5Xp1QE1esACCumWMygAJ7AUO+H8Kfh/9k+h3TiasXZ2V46gIs3bev9ErlxNWWpLuVNHyf8jyvTqjrt2wBIM45BupTs59ixrYZfDjoQwY018skpVTZeHVCTTxyhPp2O5GxsUxaN4m3V7zNo10f5aH4h6wOTSlVCXl3Qi0oIK6ggBX7V/Lg9AfpG9OX8VePtzospS5KSYOb6KAnnue1/VDzcnPZGBJCqyB/bvzmRhpWb8jUW6Zq9yil1AXzaEIVkQEiskVEtovIs8XsDxSRb5z7V4hIk0L7nnNu3yIibp/YfvMff5Dv68ve7HUcyz3GT0N+Ijw43N1fo8rZzlGj2DlqlNVhKC/lseaYiPgC7wP9cUwpvUpEEopMtncvkGGMaS4iQ4A3gNtFpA2OWVLbAg2AuSLSwhhjc1d8iYmJAKxnPZ/f8LlOX1JFRNesaXUIGGP0rbpKyB2zl3iyhdoV2G6M2WmMyQOmANcXqXM98Lnz83dAP3H8Jl4PTDHG5BpjdgHbnedzmzmb1xBYUMDQ6x7g5jY3u/PUykJdJkygy4QJln1/UFAQaWlpbvnHqcqPMYa0tDSCgoIu6jyevGHYECjcKTAZ6FZSHee000eBcOf25UWOPaeHvYg8ADwAEB0dXabgqvkZLkvZy7/6f1am41TFlujmN5PKKioqiuTkZFJSUiyNQ5VdUFAQUVFRF3UOTybU4q55iv63XVIdV47FGDMBmACOSfrKEtzHb36ql2bK7fz9/YlxcW4yVfV48pI/GSj8YnUUcKCkOiLiB9QE0l089qJpMlVKuZMnE+oqIFZEYkQkAMdDpoQidRKA4c7PtwDzjOPmUwIwxNkLIAaIBVZ6MFallLpoHrvkd94THQnMAnyBicaYJBEZDaw2xiQA/wW+FJHtOFqmQ5zHJonIVGAjUAA87M4n/Eop5QlSVZ5GikgKsKeMh0UAqR4Ix90qS5xQeWLVON2rssQJZY+1sTEm0pWKVSahXggRWW2Mibc6jtJUljih8sSqcbpXZYkTPBur1756qpRS7qYJVSml3MTbE6p1r9SUTWWJEypPrBqne1WWOMGDsXr1PVSllHInb2+hKqWU22hCVUopN9GEqpRSbqIJVSml3EQTqlJKuYkmVKWUchNNqEop5SaaUJVSyk00oSqllJtoQlVKKTfRhKqUUm6iCVUppdxEE6pSSrmJJlSllHITTahKKeUmmlCVUspNNKEqpZSbaEJVSik38bM6AHeJiIgwTZo0sToMpVQVs2bNmlRjTKQrdatMQm3SpAmrV6+2OgxlsZh33gFg16hRFkeiqgoR2eNqXY9d8ovIRBE5IiIbStgvIvKuiGwXkfUi0rnQvuEiss1ZhnsqRlX1ZJw8ScbJk1aHobyUJ++hTgIGnGf/QCDWWR4APgQQkdrAi0A3oCvwooiEeTBOpZRyC48lVGPMIiD9PFWuB74wDsuBWiJSH7gamGOMSTfGZABzOH9iviArZs9m6qefuvu0SikvZuVT/obAvkLryc5tJW0/h4g8ICKrRWR1SkpKmb58wpw5PLx9O8ZuL1vUSilVAisTqhSzzZxn+7kbjZlgjIk3xsRHRrr0EO60uDp1SK1WjUM7dpTpOFWxtY6IoHVEhNVhKC9lZUJNBhoVWo8CDpxnu1t1aNUKgMRVq9x9amWhZffdx7L77rM6DOWlrEyoCcDdzqf93YGjxpiDwCzgKhEJcz6Musq5za3iunUDIFFbqEopN/FYP1QRmQz0ASJEJBnHk3t/AGPMR8AM4BpgO5AN3OPcly4iLwOnmo6jjTHne7h1QcLq1KHRiROsz89396mVhRq+9RYA+594wuJIlDfyWEI1xgwtZb8BHi5h30RgoifiKizOZiPR01+iytWJvDyrQ1BezKvf5Y+rWZPNNWqQk5FhdShKqSrAqxNqh5gYbD4+bFy+3OpQlFJVgFcn1LjOjrddE5OSLI5EKVUVVJnBUS5E81atqJafz/pDh6wORblJl/r1rQ5BeTGvTqi+vr60z8khMTfX6lCUm/w2XMfSUdbx6kt+gLigIBJDQjD6dFgpdZG8PqF2aNCA9GrV2L9undWhKDeIHDeOyHHjrA5DeSmvT6hxbdsCkLh2rcWRKHfIt9nIt9msDkN5Ka9PqB26dAFg/R6XB+VWSqliefVDKYCaoaE0yc4m8fhxq0NRSlVyXt9CBeggQqKfH5hiRwlUSimXeH0LFSAuPJzpx49zcvduqsXEWB2Ougg9o6OtDkF5MU2oQFxsLPbERDasWMElmlArtel33GF1CMqL6SU/EHfqwdTWrRZHopSqzLSFCjSNiiIkP5/Eo0etDkVdpFpjxgCQ+eyzFkeivJG2UAEfEdrn55NYUGB1KEqpSkwTqlNcaCiJtWphMjOtDkUpVUlpQnWKa9SIo0FB7F250upQlFKVlEcTqogMEJEtIrJdRM65qSUi/xaRdc6yVUQyC+2zFdqX4Mk4AeI6dgRg/fr1nv4qpVQV5clJ+nyB94H+OKaGXiUiCcaYjafqGGMeL1T/EaBToVOcNMZ09FR8RbVv3Rp++onE/fu5rry+VLndgObNrQ5BeTFPPuXvCmw3xuwEEJEpwPXAxhLqD8UxM6olqgcG0jQnh8QTJ6wKQbnBlFtusToE5cU8ecnfENhXaD3Zue0cItIYiAHmFdocJCKrRWS5iNxQwnEPOOusTklJueiA4/z9SQwKAh1wutJKzc4mNTvb6jCUl/JkQpVitpX0svwQ4DtjTOFx16KNMfHAHcDbItLsnJMZM8EYE2+MiY+MjLzogOMaNmR77dpkLVly0edS1mj+7rs0f/ddq8NQXsqTCTUZaFRoPQo4UELdIcDkwhuMMQecy53AAs6+v+oRl/bogRFh6fz5nv4qpVQV5MmEugqIFZEYEQnAkTTPeVovIi2BMGBZoW1hIhLo/BwBXEbJ917dpkfLlvjZ7SzQsVGVUhfAYwnVGFMAjARmAZuAqcaYJBEZLSKDC1UdCkwx5qyx81oDq0UkEZgPjCncO8BTQgMCuMTHh4WBgZCW5umvU0pVMR59l98YMwOYUWTbC0XW/1XMcUuB9p6MrSS9Y2J402bjxNy5hNx+uxUhKKUqKX1Tqog+3bpR4OvL0sWLrQ5FXYBb2rThljZtrA5DeSkdbaqIHk2a4GsMCw8coL8xIMV1VlAV1aeDB5deSSkP0RZqEdUDA4kPCGBBWBhs22Z1OKqMtqSmsiU11eowlJfShFqM3rGxrGzYkOzZs60ORZVRt08/pdunn1odhvJSmlCL0adjR/J9fVm2fLnVoSilKhFNqMW4LDoaH2NYmJoK+flWh6OUqiQ0oRajRmAgXYKDWdCgAaxYYXU4SqlKQhNqCXq3bs2Khg05OWeO1aEopSoJTagl6NOyJXl+fixfvdrqUFQZDI+LY3hcnNVhKC+l/VBL0PPUfdSTJ7kiIwPCwqwOSbngnYEDrQ5BeTFtoZagZlAQnWrUYEHjxqCjT1UaK5KTWZGcbHUYyktpQj2PPm3asDwqihztj1ppXP3VV1z91VdWh6G8lCbU8+gdE0Ounx8rdOI+pZQLNKGeR6/GjRFgYUCAvoaqlCqVJtTzqBUURMfatVnQpAn8739Wh6OUquA0oZaiT4sWLIuOJnfSJLDZSq2vlPJemlBL0adJE3J8ffndxwf04VSF90jXrjzStavVYSgvpf1QS9EvJoZgf3++69yZvp9+CtrPsUJ7uW9fq0NQXsyjLVQRGSAiW0Rku4g8W8z+ESKSIiLrnOW+QvuGi8g2ZxnuyTjPJyQggOtatOD7tm0p+PlnOHzYqlCUC2Zu28ZMfYCoLOKxhCoivsD7wECgDTBURIqbm+IbY0xHZ/nUeWxt4EWgG9AVeFFELHtV6ba2bTni48PCqCj4/HOrwlAuGPr99wz9/nurw1BeyqWEKg53isgLzvVoESntRlVXYLsxZqcxJg+YAlzvYlxXA3OMMenGmAxgDjDAxWPdbmDz5oT4+zO1Xz/49FM4a4JWpZRycLWF+gFwKY4pnwGycLQ+z6chsK/QerJzW1E3i8h6EflORBqV5VgReUBEVovI6pSUFBd+jAtTzd+fwS1b8n10NAU7doBO4KeUKoarCbWbMeZhIAfA2WoMKOWY4ma3K9q0+xloYozpAMwFTl1Pu3IsxpgJxph4Y0x8ZGRkKeFcnNvbtiXNbmde27bwySce/S6lVOXkakLNd94TNQAiEgnYSzkmGWhUaD0KOFC4gjEmzRiT61z9BOji6rHl7ermzakeEMDUa66B776DjAwrw1FKVUCuJtR3gR+BOiLyKrAEeK2UY1YBsSISIyIBwBAgoXAFEalfaHUwsMn5eRZwlYiEOR9GXeXcZpkgPz+ub9WKH2rUID8vD77+2spwVAn+0asX/+jVy+owlJdyqR+qMeZ/IrIG6IfjcvwGY8ymUo4pEJGROBKhLzDRGJMkIqOB1caYBOBRERkMFADpwAjnseki8jKOpAww2hiTXvYfz71ua9OGr9avZ27//gz85BP4299Airs7oazy9GWXWR2C8mJiqsgT6/j4eLPaw6Pr5xYUUPfNN7lRhM+efRZWroRLLvHod6qy+WbDBgBub9fO4khUVSEia4wx8a7U1VdPyyDQz48bWrXiR7udvLAwePFFq0NSRTw4fToPTp9udRjKS2lCLaPb2rblaF4es595BmbOhFmW3tpVSlUgmlDL6MqmTQkLCmJqs2bQrBk88QQUFFgdllKqAtCEWkYBvr7c2KoVP23fTs4bb8DGjdovVSkFaEK9ILe1bcux3FxmtmkDvXvDCy9AZqbVYSmlLKYJ9QL0jYmhUY0avLtyJbz1FqSlwauvWh2WAt648kreuPJKq8NQXkoT6gXw9/Xlse7dWbB7N6vq1oXhw+Gdd2DHDqtD83oPxsfzYLxLPVyUcjtNqBfo/s6dqRkYyLilSx2t04AAePppq8Pyeh+vXs3HHu6PrFRJNKFeoOqBgTwUH8/3mzaxs1o1eOYZ+OEHWLjQ6tC82jNz5/LM3LlWh6G8lCbUi/Bot274ivDWsmXw5JPQuDHcfTccOWJ1aEopC2hCvQgNqlfnrg4dmLh2LakA33/vSKa33AJ5eVaHp5QqZ5pQL9Lfe/TgZEEB769cCV26wMSJjgGoH3lER/ZXystoQr1IrSMjubZFC95btYrs/HwYOhSefRYmTIAPP7Q6PKVUOdKE6gZP9ehBanY2n69b59jwyiswaBCMGgULFlgam7f5+Npr+fjaa60OQ3kpTahu0Cs6mq4NGzJ+2TJsdjv4+joGoI6NddxP3bXL6hC9xu3t2unQfcoymlDdQER4qkcPdmRk8OPmzY6NNWrATz+BzQb9+8OWLdYG6SXG/v47Y3//3eowlJfShOomN7ZqRcvwcJ777TdyTo0+FRvrGOLv2DHo3h3mz7c2SC/w2uLFvKaz0iqLeDShisgAEdkiIttF5Nli9j8hIhud00j/JiKNC+2zicg6Z0koemxF4+vjw3vXXMP29PSz/0F37w4rVkCDBnDVVfDf/1oXpFLKozyWUJ2zpL4PDATaAENFpE2RamuBeOc00t8BYwvtO2mM6egsgz0Vpztd2bQpd7Rvz5glS9icmnpmR0wMLF0K/frBffc5XlG1lzZprFKqsvFkC7UrsN0Ys9MYkwdMAa4vXMEYM98Yk+1cXY5juuhK7a2rriIkIICHpk/nrPm6ataE6dPh4Ydh3DgYPBj27rUuUKWU23kyoTYE9hVaT3ZuK8m9wMxC60EislpElovIDZ4I0BPqhobyxpVXsnDPHr5ITDx7p58fvPeeo8ybB61awcsvw8mT1gSrlHIrTybU4uZXLvbVIRG5E4gHxhXaHO2cafAO4G0RaVbMcQ84k+7qlJQUd8TsFvd17kyPRo34+5w5pGVnn1vh4Ydh0ya49lrH4NRt2sCPP+qbVW4w+eabmXzzzVaHobyUJxNqMtCo0HoUcKBoJRG5EngeGGyMyT213RhzwLncCSwAOhU91hgzwRgTb4yJj4yMdG/0F8FHhI8GDSIzJ4en58wpvlLjxjB1qqOlGhoKN93k6F41c6ajq5W6IANjYxkYG2t1GMpLeTKhrgJiRSRGRAKAIcBZT+tFpBPwMY5keqTQ9jARCXR+jgAuAzZ6MFa3a1+3Lk90787EdetYvGdPyRWvuALWrnUMUP3nn3DNNdC8Obz+Ohw+XH4BVxH/nDePf86bZ3UYykt5LKEaYwqAkcAsYBMw1RiTJCKjReTUU/txQCjwbZHuUa2B1SKSCMwHxhhjKlVCBXihd2+a1KrF8GnTSDlxouSKfn7w6KOwb5+j1RoTA//4B0RFwW23wZQpjmlWVKn+s3Il/1m50uowlJcSU0Xu28XHx5vVFXCk9hXJyfT5/HPiGzRg7l13Eejn59qBmzc7Blj54gtHMhWBrl1hwABH6dIF/P09G3wlVGvMGAAynz2n27NSF0RE1jif55RK35TysG5RUXx+ww0s2buXB4p2pTqfVq0cEwAePgzLl8OLLzq2jx4Nl17quO96ySXw4IPw8cewahWcrxWslPI4F5tL6mLc1rYtW1JTeWHBAlqFh/Ncr16uH+zrC926OcqLLzpaq7/9BqtXwx9/wLffOlqyp9SpA82aQdOmjmV0NNSvD3XrQr16jv3aslXKIzShlpP/u/xyNqel8Y9584gND+eWNkVfGnNReLjjvupttznWjYE9exzJdcsW2LnTMfvq4sWOEa+KaxHXrg1hYY5Sq9aZZWgohIScWYaEQLVqEBR0dgkIcBR//zOf/fzOFF/fM0tfX/DRCyHlHTShlhMR4b+DB7MrI4O7f/yRxjVrcknD873n4PKJoUkTRykqNxcOHoRDhxzl8GHH8sgRyMiAzEzHMjnZ8fn4ccdtA0/cV/fxOTvBFi4iZ0rR9eLKqZ+7mOWsiAjH+oQJ59Yp+vl824rjaj1PHa/c48EH4fHHPXJqTajlKMjPj2lDhtDt008Z9PXX/HLHHe5JqiUJDCw52ZbEGMebWydOOBJsTs65JS8P8vMdy1OloMDRf7ag4OzPNptj3AKb7UwxxrGtcDHmTCm6XricirGEZbfCP0fhZdHP59tW0p/LxagiD3+rhPr1PXZqfcpvgS2pqQz43/84cuIEk2++mcEtW1odUpUxaqbj7eV3Bg60OBJVVehT/gquZUQEy+69lzaRkdz4zTeOCf6UW3yemMjnRcdQUKqcaEK1SL3QUBYMH86g2FhGzpzJU7NnY68iVwtKeStNqBYKCQjgx9tv5+FLLuHNZcu4/bvvyMzJsTospdQF0oRqMV8fH/4zcCBv9u/PD5s20eb99/lx0yarw1JKXQBNqBWAiPBkjx6suO8+6oSEcNPUqdwydSoHs7KsDk0pVQb6lL+CybfZGL9sGf9asIBq/v682b8/93TqhI/2YXTJFufUMy1P9UdV6iKV5Sm/JtQKamtaGvf//DOL9uyhVUQEz1x2GXe0b0+Ar6/VoSnlVbTbVBXQIjyc+cOHM+Xmmwn09eWen36i+bvv8s7y5ZzIy7M6vArrvoQE7kuo8JPkqipKW6iVgDGGmdu38/qSJSzZu5eI4GCGx8UxtF07Otevj+jtgNN0+D7lbmVpoeqrp5WAiHBNbCzXxMayZO9e3ly6lHdXrGD8smXE1q7N0HbtGNq+Pa30vqFSltKEWsn0jI6mZ3Q06SdP8v3GjUzesIGXFy1i9KJFtIqI4IomTegbE0OfJk2ICA62OlylvIom1EqqdrVq3N+lC/d36cKBrCy+TUpi1o4dfLl+PR86b310qFuXXtHRdKpXj4716tG2Th2CXJ0xQClVZh791yUiA4B3AF/gU2PMmCL7A4EvgC5AGnC7MWa3c99zwL2ADXjUGDPLk7FWZg2qV2dU9+6M6t6dfJuN1QcOMG/XLubv3s3niYm8v2oVAH4+PrSOiKB93brE1q5Ns7AwmteuTbPatYkMDtZ7sUpdJI89lBIRX2Ar0B/HlNKrgKGFJ9sTkb8BHYwxD4nIEOBGY8ztItIGmAx0BRoAc4EWxpgS51euyg+lLobdGHZmZLDu0KHT5c8jR9h39CiF/+ZDAwJoWL06DapXp2GNGjQIDaVB9epEBAcTHhzsWFarRnhwMNUDAips8k3NzgbQ2x3KbSrKQ6muwHZjzE5nUFOA6zl7OujrgX85P38HvCeOf6nXA1OMMbnALhHZ7jzfMg/GWyX5iNC8dm2a16591iwBuQUF7M7MZHt6OjsyMtiZkcGBrCwOZGXx+969HMjKItdW/P9fPiJUDwigZlAQNQIDqREYSPWAAIL9/QkJCCDYz49gf3+C/f0J9PMjyFkCfX0J9PMjwNf3rOLv44O/ry9+Pj5nFV8RfItZ+ojgK4JPMSXIzw8fEU7m5+MjgoggUOxSKXfzZEJtCOwrtJ4MZ8b/LVrHGFMgIkeBcOf25UWO9eBIzN4n0M+PlhERJb5RZIwh/eRJUrOzSTt5krTs7NOfj+bkcCw3l6O5uaeXmTk5HMjK4kR+PtmFSoHdXs4/WdkUTq5FP8EiQpgAACAASURBVFPCvuLOQZH9xdUs7nhX03pF/A+g4kXkmicvvZR/9u7tkXN7MqEW9+dd9P5CSXVcORYReQB4ACA6Orqs8anzEBHCnZf7F8Nmt5Nrs5FTUHC65Nts5Nvt5Nlsp0uB3X5WybfZsBmDzW4/a2l3frY7P9uNwWYMxvn5/+bNA+DFPn1ObzM4/oMoaQmc85kS9hVVtG7hbWfVK+Z4V2+2VcS+4hUvItd19uCI/Z5MqMlAo0LrUcCBEuoki4gfUBNId/FYjDETgAnguIfqtsiV2/j6+BDs40NwOc20+vKiRQA827NnuXyfUoV58tXTVUCsiMSISAAwBCj6TmACMNz5+RZgnnH8d5wADBGRQBGJAWIBHdZeKVWheayF6rwnOhKYhaPb1ERjTJKIjAZWG2MSgP8CXzofOqXjSLo4603F8QCrAHj4fE/4lVKqIvBoP1RjzAxgRpFtLxT6nAPcWsKxrwKvejI+pZRypyozOIqIpAB7ynhYBJDqgXDcrbLECZUnVo3TvSpLnFD2WBsbYyJdqVhlEuqFEJHVrnbYtVJliRMqT6z/396dx0dV3/sff33IHgIGSFQQEFkkRGRrBA1aKcWFCi4114WrxRV6W1u99mqpv59al1ttpT6u3lYrYn9qXSCKKFKXosgmFAhCWESUtUH2HRLIMvn8/pgJhpBAljPzncn5PB+P8zgzZ87MeTtt3pxtzrGc3oqVnBDerHY9VGOM8YgVqjHGeMTvhTrBdYB6ipWcEDtZLae3YiUnhDGrr/ehGmOMl/y+hmqMMZ6xQjXGGI9YoRpjjEesUI0xxiNWqMYY4xErVGOM8YgVqjHGeMQK1RhjPGKFaowxHrFCNcYYj1ihGmOMR6xQjTHGI1aoxhjjEStUY4zxiBWqMcZ4xArVGGM8YoVqjDEesUI1xhiPxLsO4JWMjAzt0qWL6xjGmGZmyZIlu1Q1sz7zNptC7dKlCwUFBa5jGMdueucdAF778Y8dJzHNhYhsqu+8Ed/kF5FOIvKZiKwWkVUicnct84iIPCsia0VkuYgMiHROE5s2HzjA5gMHXMcwPuViDbUC+JWqfiEirYAlIjJDVb+sNs9woEdoGAQ8HxobY0zUinihqupWYGvo8UERWQ2cAVQv1KuAVzV4j+t/iki6iLQPvdfEkIqKCkpLSzly5AhHjhyhtLSUsrIyysvLKSsrOzpUVFTUOgQCgWOGysrKo+PahqLDh1FVnnjiCVSVyspKVPWEA3Dc45rjum63XnPemo9PNO1EnxdNojFTU1xyySVcccUVYflsp/tQRaQL0B9YWOOlM4Cias83h6YdU6giMgYYA9C5c+dwxfQlVWXPnj3s3LmT3bt3s3v3bnbt2sXu3bvZv38/Bw4cODo+cOAAhw4doqSkhOLiYkpKSo4OgUAgssFvuQWAB15++aSzisjRofrzqsc1x1WPa/uc6uOaj0807USfF02iMVNjtWvXrvkVqoikAVOAe1S15k6v2v7XO+6fSVWdAEwAyMnJaV7/jIZZaWkpGzZsYO3ataxbt47169ezZcuWY4aysrJa39uiRQtat27NKaecQuvWrWndujVt27alY8eOtGzZktTUVFJTU0lJSSE5OfnokJSURFJSEomJiccMCQkJJCQkEB8ff3SIi4s7Oq45tGjR4ui4RYsWiMjR57+dOxcR4bHnnz/6Wm2DMeHgpFBFJIFgmb6uqu/UMstmoFO15x2BLZHI1txUVlaybt06li1bdnRYuXIlRUVFx2zKpaWl0bFjRzp06MBFF11Ehw4daN++PZmZmbRr146MjAzatWtHu3btSEtLi9pSGj98uOsIxsciXqgS/Et8CVitqk/XMds04C4RmUTwYNR+239aP+Xl5SxevJiZM2fy2WefsWjRIg4dOgRAfHw82dnZXHTRRfTo0YNu3brRvXt3unXrRkZGRtSWpDGxwsUa6mDgZmCFiCwLTXsA6Aygqn8BPgB+BKwFSoBbHeSMGVu2bCE/P5+PP/6YuXPnUlxcDEDfvn0ZPXo0AwYMoF+/fmRnZ5OcnOw4bXhdm58PwJTrrnOcxPiRi6P886h9H2n1eRT4eWQSxabdu3czZcoU3nzzTWbPno2qkpWVxejRoxk6dCgXX3wxGRkZrmNG3O6SEtcRjI81m19K+cW8efMYP348f//736moqODss8/moYce4sYbb6Rnz56u4xnja1aoMUBV+eCDD3jiiSf4/PPPycjI4O6772bUqFH079/f9n0aEyWsUKNYZWUl+fn5PPHEEyxfvpxOnTrxzDPPcMcdd5Camuo6njGmBivUKPX1119z5513MmfOHHr16sXLL7/MqFGjSEhIcB0tqv3wrLNcRzA+ZoUaZcrLyxk/fjyPPPIIKSkpTJw4kVtvvZUWLezStfXx4MUXu45gfMwKNYoUFBRw++23s3z5cvLy8nj22Wdp376961jGmHqy1Z4ooKqMHz+eQYMGsXPnTqZOncpbb71lZdoIw19/neGvv+46hvEpW0N1rKKigrvvvpvnnnuOvLw8XnzxRdLT013HilmHy8tdRzA+ZoXqUHFxMTfccAPTp0/nvvvu48knn7R9pcbEMCtUR7Zt28bIkSP54osv+POf/8zPfvYz15GMMU1kherAmjVruOyyy9i5cyfvvvsuI0eOdB3JGOMBK9QI27FjB5dddhklJSXMnj2bnJwc15GalRFnn+06gvExK9QIOnLkCFdffTU7duxgzpw5VqZh8F+5ua4jGB+zQo0QVeX2229nwYIFvPXWW1amxjRDdkg5Qh5//HHeeOMNfve735GXl+c6TrM15OWXGVKP+0kZEw5WqBEwefJkHnroIX7yk58wbtw413GMMWFihRpmCxcu5JZbbuHCCy9kwoQJdqk9Y5oxK9QwKi4u5vrrr6d9+/ZMnTqVpKQk15GMMWHkpFBF5K8iskNEVtbx+hAR2S8iy0LDQ5HO6IVHH32UTZs28corr/jydiTG+I2ro/wvA38CXj3BPHNVdURk4nhvxYoVPP3009x2221cdNFFruP4xnXnnOM6gvExJ4WqqnNEpIuLZUdCZWUlY8eOJT09nT/84Q+u4/jKz847z3UE42PRvA/1AhEpFJEPRaTW1Q4RGSMiBSJSsHPnzkjnq9PEiRNZsGAB48ePp127dq7j+EpJeTkldsUp44gE79jsYMHBNdTpqtq7ltdaA5WqekhEfgQ8o6o9TvR5OTk5WlBQEJasDbF9+3aysrLo168fM2fOtKP6EVZ1DuqsW25xmsM0HyKyRFXr9UucqFxDVdUDqnoo9PgDIEFEYuKozr333ktxcTHPP/+8lakxPhOVhSoip0uojURkIMGcu92mOrkZM2bwxhtvMG7cOLKyslzHMcZEmJODUiLyJjAEyBCRzcDDQAKAqv4FyAP+Q0QqgMPADepq30Q9BQIBfvGLX9C9e3ceeOAB13GMMQ64Osp/40le/xPB06pixtSpU1mzZg1vvfUWycnJruMYYxywq015QFV56qmn6N69O9dcc43rOL52S79+riMYH7NC9cDcuXNZtGgRzz33HHFxca7j+JoVqnEpKg9KxZqnnnqKjIwMbrFTdZzbVVLCrpIS1zGMT1mhNtGXX37J9OnTueuuu0hJSXEdx/fy8vPJy893HcP4lBVqE/3xj38kJSWFn//8566jGGMcs0Jtgi1btvC3v/2N2267za4mZYyxQm2KZ599lkAgwL333us6ijEmClihNtLBgwf5y1/+wrXXXkvXrl1dxzHGRAE7baqRXnzxRfbv3899993nOoqp5j/sbrLGIWdXm/JaJK82VV5eTrdu3ejWrRufffZZRJZpjHEj5q82Fe1mzpxJUVERv/zlL11HMTUU7d9P0f79rmMYn7JCbYT8/Hxat27N8OHDXUcxNdw8dSo3T53qOobxKSvUBiorK+Odd97hqquusougGGOOYYXaQJ988gn79u3juuuucx3FGBNlrFAbKD8/n1NOOYVLL73UdRRjTJSxQm2A0tJS3n33Xa655hoSExNdxzHGRBk7D7UB/vGPf7B//37b3I9iv7rgAtcRjI85WUMVkb+KyA4RWVnH6yIiz4rIWhFZLiIDIp2xNvn5+bRp04Zhw4a5jmLqMLJnT0b27Ok6hvGpJhWqiJwmIi+JyIeh59kicns93voycPkJXh8O9AgNY4Dnm5LTC0eOHOG9997jxz/+MQkJCa7jmDqs2bWLNbt2uY5hfKqpa6gvAx8DHULPvwbuOdmbVHUOsOcEs1wFvKpB/wTSRaR9E7M2yccff8zBgwdtcz/KjZ0+nbHTp7uOYXyqqYWaoar5QCWAqlYAgSangjOAomrPN4emOTN58mTatWvH0KFDXcYwxkSxphZqsYi0AxRARM4HvPjdn9Qy7biLDojIGBEpEJGCnTt3erDY2h0+fJhp06Zx7bXXEh9vx/GMMbVrajvcC0wDuonI50AmkNfkVME10k7VnncEttScSVUnABMgeHEUD5Zbqw8//JDi4mLb3DfGnFCjClVE+gA9VfUtEbkY6ElwrXKNqpZ7kGsacJeITAIGAftVdasHn9so+fn5nHrqqVx88cWuIhhjYkBj11CfBPJFpCtwCNigqvW+1aSIvAkMATJEZDPwMJAAoKp/AT4AfgSsBUqAWxuZs8mKi4t5//33GT16tG3ux4D/+/3vu45gfKyxDXE/cBcwEkgD0kQkheA+WSF4kOoNVX2qtjer6o0n+nANXqQ1Ku569+mnn1JSUkJenhd7Mky4DbO7JxiHGlWoqroS+Gldr4tIFsHN9loLNZbMmjWL5ORkBg8e7DqKqYdl27YB0O/00x0nMX4Url9KlQNXhOmzI2rWrFlccMEFJCUluY5i6uGejz7ino8+ch3D+FRYClVV16nqN+H47Ejat28fy5YtY8iQIa6jGGNigF1t6gTmzp2LqtrRfWNMvVihnsDs2bNJSkpi0KBBrqMYY2KAFeoJzJo1i/PPP99udWKMqRc7sbIO+/fvZ+nSpTz44IOuo5gG+N0Pf+g6gvExK9Q6zJs3j8rKStt/GmNyO3U6+UzGhIlt8tdh1qxZJCYmcv7557uOYhpgflER84uKTj6jMWFghVqH2bNnM2jQIFJSUlxHMQ3wwKef8sCnn7qOYXzKCrUWBw4cYMmSJXb+qTGmQaxQa/H555/b/lNjTINZodZi1qxZJCQkcIHdQdMY0wBWqLWYPXs2AwcOJDU11XUUY0wMsdOmajh48CAFBQWMGzfOdRTTCP9z+YlupmtMeFmh1jB//nwCgYDtP41Rdtk+45Jt8tcwa9Ys4uPjyc3NdR3FNMIn69fzyfr1rmMYn7I11Bpmz57NeeedR8uWLV1HMY3w+Jw5gF2537jhZA1VRC4XkTUislZEjttZKSK3iMhOEVkWGu6IRK5Dhw6xePFi29w3xjRKxNdQRSQO+DNwCcHbRS8WkWmq+mWNWSer6l2RzDZ//nwqKirshH5jTKO4WEMdCKxV1fWqWgZMAq5ykOM4CxYsQERs/6kxplFcFOoZQPWrV2wOTavpWhFZLiJvi0hELiFUWFhI9+7dadWqVSQWZ4xpZlwclJJapmmN5+8Db6pqqYj8FHgFGHrcB4mMAcYAdO7cucnBCgsLGTBgQJM/x7jzwogRriMYH3OxhroZqL7G2RHYUn0GVd2tqqWhpy8C36vtg1R1gqrmqGpOZmZmk0IdPHiQ9evX07dv3yZ9jnGrZ0YGPTMyXMcwPuWiUBcDPUTkLBFJBG4AplWfQUTaV3t6JbA63KFWrFgBYIUa495fs4b316xxHcP4VMQ3+VW1QkTuAj4G4oC/quoqEXkUKFDVacAvReRKoALYA9wS7lyFhYUA9OnTJ9yLMmH0xwULABjZs6fjJMaPnJzYr6ofAB/UmPZQtce/AX4TyUyFhYWkp6d7si/WGONP9tPTkMLCQvr06YNIbcfMjDHm5KxQgcrKSlasWGH7T40xTWKFCqxfv57i4mIrVGNMk9jFUbADUs3J3665xnUE42NWqAQLtUWLFvTu3dt1FNNEnU45xXUE42O2yU+wUM8++2y7ZXQzMHnlSiavXOk6hvEpW0MFli9fzqBBg1zHMB54vqAAgOtta8M44Ps11P3797Nx40Y7IGWMaTLfF+ry5csBOyBljGk63xdq1RF+W0M1xjSV7wt1+fLltG3bljPOqO2SrMYYU3++PyhVWFhI37597SenzcTb113nOoLxMV+voQYCAfvJaTOTkZpKRmqq6xjGp3xdqGvXruXw4cN2QKoZeXnZMl5etsx1DONTvi5UOyDV/FihGpd8XajLly8nLi6O7Oxs11GMMc2Arwu1sLCQrKwskpOTXUcxxjQDvi9U29w3xnjFSaGKyOUiskZE1orIuFpeTxKRyaHXF4pIF68z7Nmzh6KiIjsgZYzxTMTPQxWROODPwCUEbym9WESmqeqX1Wa7Hdirqt1F5Abg98D1Xuao+smpraE2Lx/8+7+7jmB8zMUa6kBgraquV9UyYBJwVY15rgJeCT1+G/iheHzmvRVq85SakEBqQoLrGManXBTqGUBRteebQ9NqnUdVK4D9QDsvQxQWFpKZmcnpp5/u5ccax55bvJjnFi92HcP4lIufnta2pqmNmAcRGQOMARp8++exY8dy2WWX2U9Om5n8VasA+Nl55zlOYvzIxRrqZqBTtecdgS11zSMi8cApwJ6aH6SqE1Q1R1VzMjMzGxRi4MCBXGe/+zbGeMhFoS4GeojIWSKSCNwATKsxzzRgdOhxHjBTVY9bQzXGmGgS8U1+Va0QkbuAj4E44K+qukpEHgUKVHUa8BLwNxFZS3DN9IZI5zTGmIZycvk+Vf0A+KDGtIeqPT4C/FukcxljTFNIc9mSFpGdwKYGvi0D2BWGOF6LlZwQO1ktp7diJSc0POuZqlqvgzTNplAbQ0QKVDXHdY6TiZWcEDtZLae3YiUnhDerr3/Lb4wxXrJCNcYYj/i9UCe4DlBPsZITYier5fRWrOSEMGb19T5UY4zxkt/XUI0xxjNWqMYY4xErVGOM8YgVqjHGeMQK1RhjPGKFaowxHrFCNcYYj1ihGmOMR6xQjTHGI1aoxhjjEStUY4zxiBWqMcZ4xArVGGM8YoVqjDEesUI1xhiPWKEaY4xHrFCNMcYjVqjGGOOReNcBvJKRkaFdunRxHcMY08wsWbJkl6pm1mfeqC5UEdkIHAQCQMWJ7qXdpUsXCgoKIhXNRKmznnkGgA133+04iWkuRGRTfeeN6kIN+YGq7nIdwsSGvYcPu45gfMz2oRpjjEeivVAV+IeILBGRMV5+8JOPP851997r5UcaY3wu2jf5B6vqFhE5FZghIl+p6pyqF0MlOwagc+fODfrgPSUlvNeyJeXl5SQkJHga2hjjT1G9hqqqW0LjHcBUYGCN1yeoao6q5mRm1usg3FH9TjuNsvh4Vq9Y4Vle416vjAx6ZWS4jmF8KmoLVURaikirqsfApcBKrz6/f8+eACxdtcqrjzRRYMEdd7DgjjtcxzA+FbWFCpwGzBORQmAR8HdV/cirDz+7f39SystZtnmzVx9pjPG5qN2Hqqrrgb7h+vy4U0+lz+7dLK2sDNcijANnPP00AN/aAUfjQDSvoYaXCP3Ly1nWogWq6jqN8UhxWRnFZWWuYxif8m+hAv1TU9mfkMDGfftcRzHGNAP+LtQzzgBg6TffOE5ijGkOfF2ovXv1Iq6ykqVr1riOYoxpBqL2oFQkpGRnk/XxxyxNTXUdxXjke+3bu45gfMzXhUqXLvTfvp3P7ETwZuPT0aNdRzA+5utNfuLj6R8I8G2LFuwsLnadxhgT4/xdqEC/1q0BWLptm+MkxguZTz1F5lNPuY5hfMoKtVMnAJbaL6aahfJAgPJAwHUM41O+L9S2WVmcuW8fy9atcx3FGBPjfF+o9OpFv23bWLpjh+skxpgYZ4Xasyf9t27l69JSDtlPFo0xTeDv06YA0tLoX16OAiu2b+eC0D5VE5subOCFxo3xkhUq0D89HQge6bdCjW3TR41yHcH4mG3yAx27dqXt4cMs3brVdRRjTAyzQgUkK4v+W7eytKjIdRTTROlPPkn6k0+6jmF8ygoVIFSoK3fvtnMYjTGNFvWFKiJxIrJURKaHbSFZWfTbto1SVb7atStsizHGNG9RX6jA3cDqsC6hQwf6HzgA2E9QjTGNF9WFKiIdgSuAiWFeED1PPZWUQMAOTBljGi3aT5v6H+B+oFW4FxSXlUWf3btZtn17uBdlwujy7t1dRzA+FrWFKiIjgB2qukREhtQxzxhgDEDnpp7QnZVFvwULmNypE6qKiDTt84wTk/LyXEcwPhbNm/yDgStFZCMwCRgqIq9Vn0FVJ6hqjqrmZGZmNm1pWVmc9+237CsttQNTMWxXSQm7SkpcxzA+FbWFqqq/UdWOqtoFuAGYqao3hW2BWVn8YONGAGZu2BC2xZjw6v7ss3R/9lnXMYxPRW2hRly3bpx14ABnqjIzVKzGGNMQMVGoqjpLVUeEdSFJSUjXrgzdu5fPNmygUjWsizPGND8xUagR06sXQ7/5hr1HjlBo56MaYxrICrW6rCyGLlwIwKe2H9UY00BWqNX16UOHPXvISkuzA1MxKi87m7zsbNcxjE9F7XmoTuTmAjA0EOCVTZsoDwRIiItzHMo0xMQrr3QdwfiYraFW16ULnH46Q9evp7i8nMVbtrhOZBpoza5drLHziI0jVqjViUBuLkPmzEGw81Fj0aCJExk0MbyXfjCmLlaoNeXm0m71avplZNiBKWNMg1ih1nTBBQAMBeYXFXG4vNxtHmNMzLBCrWnAAEhMZGhREWWBAPPttijGmHqyQq0pORm+9z0umj+fOBHbj2qMqTcr1Nrk5tJq0SIGduhgv+uPMaP79mV0376uYxifskKtTW4ulJbyw6QkFn/7LQdKS10nMvX0zPDhPDN8uOsYxqesUGtTdWBq61YCqszZtMlxIFNfCzdvZuHmza5jGJ+yQq1N+/Zw1llcsHgxSXFxth81hlz22mtc9tprJ5/RmDCwQq1Lbi7J8+YxuFMnK1RjTL1YodYlNxe2bWNomzYUbt/OzuJi14mMMVHOCrUuoQulXBr6Xfj0r792mcYYEwOitlBFJFlEFolIoYisEpFHIhqgd29ISyPniy/o2qYNb65cGdHFG2NiT9QWKlAKDFXVvkA/4HIROT9iS4+Ph0GDkPnzGdW7N59u2MC2Q4citnjTOL8YOJBfDBzoOobxqagtVA2qarCE0BDZGz3l5kJhIaO6daNSlfxVqyK6eNNwjw0dymNDh7qOYXwqagsVQETiRGQZsAOYoaoLIxogNxcqK+m1fj39Tj+dN1asiOjiTcN9+M03fPjNN65jGJ+KyBX7ReSh2qar6qMnep+qBoB+IpIOTBWR3qp6dGemiIwBxgB07tzZw8Qh54f2MMyfz6ghQ7j/k09Yt2cP3dq29X5ZxhM3TpkCwL5x4xwnMX4UqTXU4mpDABgOdKnvm1V1HzALuLzG9AmqmqOqOZmZmZ6FPSo9Hc45B+bP5/revQHs4JQxpk4RKVRV/WO14b+BIcAZJ3qPiGSG1kwRkRRgGPBV2MPWlJsLCxbQuVUrLurcmddXrEA1srtyjTGxwdU+1FSg60nmaQ98JiLLgcUE96FOD3uymnJzYe9eWL2aUeeey1e7dlG4fXvEYxhjol9EClVEVojI8tCwClgDPHOi96jqclXtr6p9VLX3yfa3hk3VEeP33ycvO5v4Fi140w5OGWNqEanbSI+o9rgC2K6qFRFadtN07gwDB8KUKWSMG8dl3brx5sqVPDFsGC1EXKczNTxw0UWuIxgfi9Q+1E3Vhm9jpkyr5OVBQQFs3Mioc8+l6MABPv/Xv1ynMrW4f/Bg7h882HUM41NRfR5q1Lj22uB4yhSu7NmT1IQEOyc1Sk1euZLJdiaGccQKtT66doX+/WHKFNISE7mqZ0/yv/ySskDAdTJTw9jp0xk7PfLHLo0BK9T6y8uDBQtg82ZGnXsuew4f5uO1a12nMsZEESvU+qra7H/nHS7t1o0zWrXi6X/+020mY0xUsUKtr549g5f0mzKFxLg4/is3l1kbNzK/qMh1MmNMlLBCbYi8PJg7F7Zt484BA2iXksIT8+a5TmWMiRJWqA2RlweqMHUqLRMTuef885n+9dcUbtvmOpkJ+f2wYfx+2DDXMYxPWaE2RHZ2cNM/dEWjn593Hq0SE3ny888dBzNVxubkMDYnx3UM41NWqA0hElxLnTULdu6kTUoKPzvvPPJXreKb3btdpzPACwUFvFBQ4DqG8Skr1IbKy4NAAN57D4D/PP98EuPi+IOtpUaFX3/yCb/+5BPXMYxPWaE2VN++wRP9Q5v9p6WlcXv//rxSWMjmAwcchzPGuGSF2lBVm/2ffBK8rB9wX24uCvxx/ny32YwxTlmhNkZeHlRUwNtvA3Bmejr/fu65TPjiC3YWFzsOZ4xxxQq1MXJygpv+Tz8NlZUA/HrwYA6Xl/OUraUa41tWqI0hAuPGwVdfwbvvAtArM5Nb+/Xj6QULWGbnpTrzwogRvDBixMlnNCYMJFrvjyQinYBXgdOBSmCCqtZ5lf+cnBwtiOTpMhUVkJUFbdvCwoUgwt7Dh8l+7jnap6Wx6M47iW9h/14ZE+tEZImq1uvk5mj+i68AfqWqvYDzgZ+LSLbjTN+Jj4f774fFi2HmTADapKTwp+HDWbptmx2gcuQPn39up7AZZ6K2UFV1q6p+EXp8EFjNSe6UGnGjR0P79vDEE0cnXZudzY979eLhWbP42k72j7jfzZ3L7+bOdR3D+FTUFmp1ItIF6A8srDF9jIgUiEjBzp07Ix8sKQn+8z/h00+Da6ohfxo+nJSEBO58/30qo3SXijHGe1FfqCKSBkwB7lHVY86cV9UJqpqjqjmZmZluAv70p5CeDk8+eXRS+1atePrSS5mzfKp0pgAADGtJREFUaRMTlixxk8sYE3FRXagikkCwTF9X1Xdc56lVq1Zw110wdWrwqH/ILf36MaxrV+6fMYOi/fsdBjTGRErUFqqICPASsFpVn3ad54R++UtITobf//7oJBHhhREjCKhy63vvUW73nzKm2YvaQgUGAzcDQ0VkWWj4ketQtcrMhDvvhNdeg2pX8O/apg1/Gj6cTzdsYOz06UTrKWrNyZvXXsubVberMSbC4l0HqIuqzgPEdY56+9Wv4Lnn4JFHYOLEo5Nv7d+fDfv28dicOZx5yik8PGSIu4w+MLxHD9cRjI9F8xpqbOncOViqL70EH310zEuPDBnC6L59+e3s2fy/pUsdBfSHB2fO5MHQecHGRJoVqpceeQTOOQduv/3olagguD91wsiRDOvalTHTp/OPdeschmze/nfRIv530SLXMYxPWaF6KSkJXn0VduyAX/zimJcS4+KYct11ZGdmcm1+vv3e35hmyArVawMGwIMPwuuvH70IdZXWSUl8MGoU6cnJXPbaa/xz82ZHIY0x4WCFGg6/+U3wEn8//Sls337MS2e0bs0nN99MWmIiQ15+mTdXrHAU0hjjNSvUcEhIgFdegYMHg6Va43SpnhkZLLzjDgZ17Miod97hoc8+s5+oGtMMWKGGS3Y2/Pd/B6+X+uqrx72ckZrKjJtv5rZ+/Xhszhyuf/ttSsrLHQRtXj6+6SY+vukm1zGMT0XteajNwj33wLRpMGYMnHYaXH75MS8nxsUx8coryc7M5L4ZM1i/dy+vXH01vU891VHg2DeoY0fXEYyP2RpqOMXFBX/jf845cPXVMGPGcbOICL/KzWXajTeyad8++r/wAr+eMYPisjIHgWPf3R9+yN0ffug6hvEpK9Rwa9s2WKQ9e8KVVx69GHVNI84+m6/uuouf9OnDH+bPJ/u553h/zZoIh419rxQW8kphoesYxqesUCOhXbvgbae7d4eRI2H27Fpny0hN5aWrrmLurbfSKjGRKydN4upJk1i5Y0eEAxtjGsMKNVIyM4MXou7SBa64AubNq3PWCzt3ZunYsfx+2DA+Wb+ec59/nuGvv86n69fbBVaMiWJWqJF06qnBUu3YES65BP70p+NOqaqSEBfH/YMHs+mee3j8Bz9g6datDPvb3xgwYQKvL19OaUVFhMMbY07GCjXSTj8d5syBoUODP0/90Y/gBD9DbZeayv/5/vfZeM89TBw5kiMVFdw0dSqnjR/PLe++y9+//poyu9aqMVEham8j3VARv410U6nC888Hr1CVlgYvvhg8E+AkKlWZsW4dk1atYurq1ewvLSU9OZmrs7IY0aMH3z/zTDJbtozAf0B0WrNrFxD88YQxXmjIbaStUF1bvRpuugm++AJuuw0efzx4J9V6KAsEmLFuHW99+SXvfvUV+0tLAcjOzOTiM8/k4jPPJLdTJzq2bk3wBgjGmIayQo01ZWXw8MPw1FMQHw933AG//jV06lT/jwgEWLJlC7M3bWL2pk3M+9e/OBQ6l7VNcjJ9TjuNvqedRp/TTqP3qafSrW1b2qWkNLuivWPaNAAmXnml4ySmuWgWhSoifwVGADtUtffJ5o/pQq2ybl3w7qmvvBJ8Pnp08EIrXbs2+KMqKitZunUri7dsYfn27RRu386K7dsprvbz1laJiXRt04aubdpwVno6HVq1on2rVsFxWhrtW7WiVWJiTJVueujus/vGjXOcxDQXzaVQvw8cAl71TaFW+de/gjf8mzgRKiqCB7Cuvx6uuSZ4TmsjVaqyfu9evty5kw1797Ju717Wh4YN+/ZxpJYzBxJatKBtSgrtUlNpm5JC25QU0pOTaZWYSOukpKNDWmIiqQkJxwwp8fEkxceTFBdHcrXHiXFxxLUIz/FQK1TjtWZRqAAi0gWY7rtCrbJlS/A+VZMmBdde4+Nh2DC47jq47DLo0MGzRakq+0tL2XrwIFsOHmTroUNsPXiQ3YcPs+fw4e/GJSUcKC3lQGkpB8vKqKisbNTyhOCpYYlxcSS0aEFCXBzxLVocHeJEiKtj3KKOQUSYtWEDAJd064aIIHD0NYFjxlU56npMHa9Vf50a02t7vaHz1fp9xchWQiykvKJHD67Nzq73/A0p1Ji+OIqIjAHGAHTu3NlxmjDo0CF4kOqxx2DpUsjPh8mTgwevILgr4MILYfDg4DgrCxq55icipCcnk56cTK/MzHq9R1U5UlHBgdJSSsrLax1KAwGOVFRQWlERHAcClAcClAUClFdWBseBABWVlcFBlYrKSsoDASpVCagSqKw8Oq5UPW4or6xEQ4+rVg92lpSgoefVX9Nq85zoMVDra9Vfrz5Pze/luGn1nK820bvKc6xoXjmrLiuMZ4DYGmqsUQ2W6+zZwV9bzZsXvOUKQGpqsFR79QpePrBXL+jRI3hw65RT3OaOENvkN16zTX4/UYW1a4PFunx58DSsL7+EoqJj52vVKlisnToF13wzMyEjI7hPtmp8yinB+Vq3Do7jY28DZldJCRC8LoIxXvDNJr8BRIJroTXvR3/oULBc168PlmvVsHkzrFgBu3dD6LzVOqWkQMuWwXFqanBISYHkZEhMDN6UMCkp+DgxMVjACQnBcfUhLu67IT4+uFuitkHk+HFtQ9V/dy3PM6oe1zau+bih0+oSif2bMbIPNSb07Bm8pGYYRG2hisibwBAgQ0Q2Aw+r6ktuU8WQtDQ477zgUBtVKC4OFuuuXcHxgQPHDyUlcPhwcCgpCQ6lpcHbu5SVBR+XlkJ5eXCoqPhuXFEBgUBwiJAb8vIAmPT22xFbpokxDzwQvJtGGERtoarqja4zNGsiwdJNS4MzzwzvslShsjJYrBUV3z2vGgKB76ZVf031+KHq82p7DnxUVaSPPfbda9Vz1JatPtNO9N8WblG8Wy4mhfGOGFFbqKYZEflukz8xMbzLqjrLISsrvMsxphZ2tSljjPGIFaoxxnjECtUYYzwS1eehNoSI7AQ2NfBtGcCuMMTxWqzkhNjJajm9FSs5oeFZz1TVev18sNkUamOISEF9T9h1KVZyQuxktZzeipWcEN6stslvjDEesUI1xhiP+L1QJ7gOUE+xkhNiJ6vl9Fas5IQwZvX1PlRjjPGS39dQjTHGM74tVBG5XETWiMhaEYnai2eKyEYRWSEiy0Qkaq5PKCJ/FZEdIrKy2rS2IjJDRL4Jjdu4zFiljqy/FZFvQ9/rMhH5kcuMoUydROQzEVktIqtE5O7Q9Kj6Xk+QM6q+UxFJFpFFIlIYyvlIaPpZIrIw9H1OFhHPfg/ty01+EYkDvgYuATYDi4EbVfVLp8FqISIbgRxVjapz/Gq755eI/AHYo6pPhv6RaqOqv3aZM5Srtqy/BQ6p6niX2aoTkfZAe1X9QkRaAUuAq4FbiKLv9QQ5ryOKvlMJ3jempaoeEpEEYB5wN3Av8I6qThKRvwCFqvq8F8v06xrqQGCtqq5X1TJgEnCV40wxRVXnAHtqTL4KCN2ylVcI/pE5V0fWqKOqW1X1i9Djg8Bq4Ayi7Hs9Qc6ookGHQk8TQoMCQ4Gq6zt6+n36tVDPAKpf0n4zUfh/iBAF/iEiS0L30Ipmp6nqVgj+0QHhu06aN+4SkeWhXQJRsXuiSuhuFf2BhUTx91ojJ0TZdyoicSKyDNgBzADWAftUteoWv57+7fu1UGu7/Hm07vsYrKoDgOHAz0Obr6bpnge6Af2ArcAf3cb5joikAVOAe1T1gOs8daklZ9R9p6oaUNV+QEeCW6a9apvNq+X5tVA3A52qPe8IbHGU5YRUdUtovAOYSvD/FNFqe2j/WtV+th2O89RJVbeH/tgqgReJku81tK9vCvC6qr4Tmhx132ttOaP1OwVQ1X3ALOB8IF1Eqq4F7enfvl8LdTHQI3S0LxG4AZjmONNxRKRlaKc/ItISuBRYeeJ3OTUNGB16PBp4z2GWE6oqqJBriILvNXQQ5SVgtao+Xe2lqPpe68oZbd+piGSKSHrocQowjOD+3s+AvNBsnn6fvjzKDxA6peN/gDjgr6oanpvMNIGIdCW4VgrBuyu8ES05q9/zC9gOPAy8C+QDnYF/Af+mqs4PBtWRdQjBTVMFNgJjq/ZTuiIiFwJzgRVAZWjyAwT3T0bN93qCnDcSRd+piPQheNApjuDKY76qPhr6u5oEtAWWAjep6knuWFnPZfq1UI0xxmt+3eQ3xhjPWaEaY4xHrFCNMcYjVqjGGOMRK1RjjPGIFaoxxnjECtUYYzxihWqMMR75/6PUxgRRvn+aAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, (outputs, errors, errorint, u) = plt.subplots(4, 1, figsize=(5, 10), sharex=True)\n", "outputs.plot(ts, numpy.ones_like(ts), color='black')\n", "plotresponse(outputs, Gp, color='green', label='Gp')\n", "plotresponse(outputs, feedback(P*Gp, 1), color='red', label='Prop with Kc=5')\n", "plotresponse(outputs, feedback(PI*Gp, 1), color='teal', label='PI')\n", "outputs.set_ylabel('Output')\n", "outputs.legend()\n", "\n", "plotresponse(errors, 1 - feedback(P*Gp, 1), color='red')\n", "plotresponse(errors, 1 - feedback(PI*Gp, 1), color='teal')\n", "errors.set_ylabel('e')\n", "\n", "plotresponse(u, feedback(P, Gp), color='red')\n", "plotresponse(u, feedback(PI, Gp), color='teal')\n", "u.set_ylabel('u')\n", "\n", "plotresponse(errorint, (1 - feedback(PI*Gp, 1))/s, color='black')\n", "errorint.set_ylabel('∫e');" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.1" } }, "nbformat": 4, "nbformat_minor": 2 }